package com.cino.strategy;

import com.cino.entity.SysAuditLog;

/**
 * 审计日志存储策略接口
 * 
 * 定义统一的存储策略规范，支持不同的存储方式：
 * - MySQL数据库存储
 * - 本地文件存储
 * 
 * 使用策略模式，便于扩展其他存储方式
 */
public interface AuditLogStorageStrategy {
    
    /**
     * 保存审计日志
     * 
     * @param sysAuditLog 审计日志实体
     */
    void saveAuditLog(SysAuditLog sysAuditLog);
    
    /**
     * 保存审计日志（支持新增字段）
     * 
     * @param objectId      操作对象ID
     * @param objectType    对象类型（表名）
     * @param content       日志内容
     * @param operationType 操作类型
     * @param storageTable  自定义存储表名（仅MySQL存储有效）
     * @param auditStatus   审计状态：0代表失败，1代表成功
     * @param errorMessage  错误信息
     * @param duration      耗时时间（毫秒）
     * @param title         标题
     */
    void saveAuditLog(String objectId, String objectType, String content, String operationType, String storageTable,
                      Integer auditStatus, String errorMessage, Long duration, String title);
    
    /**
     * 获取存储策略类型
     * 
     * @return 存储策略类型标识
     */
    String getStrategyType();
    
    /**
     * 检查该策略是否可用
     * 
     * @return true-可用，false-不可用
     */
    boolean isAvailable();
}
